package com.atguigu.ssyx.acl.utils;

import com.atguigu.ssyx.model.acl.Permission;

import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * ClassName: PermissionHelper
 * Package: com.atguigu.ssyx.acl.utils
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 * Date: 2023-09-25
 * Time: 10:57
 */

public class PermissionHelper {
    public static List<Permission> buildPermission(List<Permission> allList) {
        //也是递归的去查 但是首先是找到递归的入口
        //id = 0 是递归的入口
        //创建一个封装数据最终的集合List
        List<Permission> trees = new ArrayList<>();
        //遍历所有菜单list集合 得到第一层数据 pid = 0
        for (Permission permission : allList) {
            //pid=0数据 第一次数据
            if (permission.getPid() == 0) {
                //level属性 表示第几层
                permission.setLevel(1);
                //调用方法 从第一次开始找
                trees.add(findChildren(permission, allList));
            }
        }
        return trees;
    }

    //递归方法 找到子节点
    //permission上次节点 从这里往下找
    //allList 所有菜单
    private static Permission findChildren(Permission permission,
                                           List<Permission> allList) {
        permission.setChildren(new ArrayList<Permission>());
        //遍历allList所有菜单数据
        //判断 当前节点 id = pid 是否一样 封装 递归往下找
        for (Permission it : allList) {
            if (permission.getId().longValue() == it.getPid().longValue()) {
                int level = permission.getLevel() + 1;
                it.setLevel(level);
                if (permission.getChildren() == null){
                    permission.setChildren(new ArrayList<>());
                }
                //封装下一层
                permission.getChildren().add(findChildren(it, allList));
            }
        }
        return permission;
    }
}
